package org.springleaf.core.mvc.controller;

import org.springleaf.core.query.PageList;
import org.springleaf.core.query.QueryObject;
import org.springleaf.utils.BeanUtils;

/**
 * 实现基本的CRUD
 * 
 * @author leaf
 * @param <T> 操作的域模型
 */
public abstract class ApiController<T> extends ModelController<T> {


	/**
	 * 通过ID得到对象
	 * @param id
	 */
	public T getModel(Long id) throws Exception {
		return getService().get(id);
	}

	/**
	 * 查询
	 * @param queryObj
	 */
	public PageList<T> queryModel(QueryObject queryObj) throws Exception {
		return getService().query(queryObj);
	}

	/**
	 * 保存
	 * @param obj
	 */
	public Object saveModel(T obj) throws Exception {
		return getService().save(obj);
	}

	/**
	 * 更改
	 * @param id
	 * @param obj
	 */
	public T updateModel(Long id, T obj) throws Exception {
		T o = getService().get(id);
		if (o != null) {
			BeanUtils.copyPropertiesByNotNull(o, obj);
			getService().update(o);
			return o;
		}
		return null;
	}

	/**
	 * 删除
	 * @param id
	 */
	public void deleteModel(Long id) throws Exception {
		getService().delete(id);
	}

}
